package main

var Time float
var Resolution vec2 // 添加分辨率参数用于像素级控制

// 改进的伪随机函数（更均匀的分布）
func hash(p vec2) float {
    p = vec2(dot(p, vec2(127.1, 311.7)),
            dot(p, vec2(269.5, 183.3)))
    return fract(sin(p.x*p.y) * 43758.5453)
}

// 分形噪声（增强细节）
func fractalNoise(uv vec2) float {
    var value float = 0.0
    var amplitude float = 0.5
    for i := 0; i < 3; i++ {
        value += amplitude * hash(uv)
        uv *= 2.0
        amplitude *= 0.5
    }
    return value
}

func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
    // 标准化坐标到[-1,1]范围
    var uv vec2 = (texCoord - 0.5) * 2.0
    var dist float = length(uv)

    // 动态参数控制
    var progress float = clamp(Time * 1.2, 0.0, 1.0)
    var pulseSpeed float = 8.0

    // 冲击波（带衰减的环形波）
    var waveWidth float = 0.05 + 0.03*sin(Time*3.0)
    var ring float = smoothstep(waveWidth, 0.0, abs(dist - progress))
    ring *= exp(-3.0*progress) // 距离衰减

    // 核心闪光（带脉动效果）
    var flash float = exp(-dist * 20.0) *
                    (1.0 - smoothstep(0.0, 0.4, progress)) *
                    (0.8 + 0.2*sin(Time*pulseSpeed))

    // 爆炸细节（分形噪声+动态扭曲）
    var noiseCoord vec2 = uv * (20.0 + 15.0*progress)
    noiseCoord += vec2(Time*2.0, Time*1.7)
    var explosionDetail float = fractalNoise(noiseCoord) *
                              smoothstep(0.3, 0.0, abs(dist - progress))

    // 颜色合成
    var coreColor vec3 = mix(vec3(1.0, 0.9, 0.7),
                           vec3(1.0, 0.5, 0.2),
                           progress)
    var rimColor vec3 = vec3(0.8, 0.3, 0.1)

    var finalColor vec3 = coreColor * flash +
                        rimColor * explosionDetail * 2.0 +
                        vec3(1.0) * ring * 0.6

    // 阿尔法通道控制（实现能量衰减效果）
    var alpha float = min(flash + explosionDetail*0.8 + ring*0.3, 1.0)

    return vec4(finalColor, alpha)
}